package net.oschina.arvin.sqlbuilder.enums;

import net.oschina.arvin.sqlbuilder.utils.Util;

/**
 * 列名称映射策略
 *
 * @author Arvin
 * @time 2017/11/16 8:52
 */
public enum ColumnMapStrategy {

    /**
     * 驼峰标识， 首字母小写
     */
    HUMP {
        @Override
        public String getMapColumn(String original) {
            return Util.wrapDbAttrName(Util.underlineToHump(original, true));
        }
    },

    /**
     * 使用下划线进行标识， 默认的规则
     */
    UNDERLINE {
        @Override
        public String getMapColumn(String original) {
            return Util.wrapDbAttrName(Util.humpToUnderline(original));
        }
    },

    /**
     * 原始字符串首字母小写
     */
    ORIGINAL_FIRST_LOWERCASE {
        @Override
        public String getMapColumn(String original) {
            return Util.wrapDbAttrName(Util.firstLetterToLowerCase(original));
        }
    },

    /**
     * 原样输出， 即java属性是什么就是什么
     */
    ORIGINAL {
        @Override
        public String getMapColumn(String original) {
            return Util.wrapDbAttrName(original);
        }
    };

    /**
     * 获取映射的字段
     *
     * @param original 源字段
     * @return 返回映射字段名称
     */
    public abstract String getMapColumn(String original);
}
